<?php
/* THEME.INC.PHP by martin $ 2009/12/17 00:32:50
*/

checkADMIN();

$theme = v_('aim')!='' ? v_('aim') : $theme;
$temp_file = strstr(v_('sub'), 'css') ? $theme : dirname($theme).'/template.php';

$header = $body = '';

$helperState = isset($_COOKIE['PPBLOG_HELPER_STATE']) ? $_COOKIE['PPBLOG_HELPER_STATE'] : 1;

if(!is_file($temp_file)){
 return $DIVISION['body'] .= '<p class="alert-p">テーマファイル：'.$temp_file.' が見つかりません。<br />名前が正しいか確認して下さい</p>';
}

if(strstr(g_('sub'), ':back')){
 $_tmp = my_glob('tmp', dirname($theme).'/');
 $textarea = is_array($_tmp) ? get_file_content($_tmp[0]) : '';
} else { 
 if(p_('editarea')!=''){
  if(array_key_exists('init', $_POST)){
   $textarea = get_file_content($temp_file.'.bak');
  } else {
   $textarea = str_replace('`', NL, p_('editarea', 0)); //!
  }
 } else $textarea = get_file_content($temp_file);
 $_tmp = my_glob('tmp', dirname($theme).'/');
 if(is_array($_tmp)){
  foreach ($_tmp as $t) unlink($t);
 }
}
if(array_key_exists('save', $_POST)){
 rewrite($temp_file, $textarea);
 if(isset($_tmp[0]) && is_file($_tmp[0])) unlink($_tmp[0]);
 showMessage('保存しました');
} else if(array_key_exists('backup', $_POST)){
 rewrite($temp_file.'.bak', $textarea);
 clearstatcache();touch($temp_file);
 if(isset($_tmp[0]) && is_file($_tmp[0])) unlink($_tmp[0]);
 showMessage('バックアップしました');
} else if(array_key_exists('init', $_POST)){
 if(is_file($temp_file.'.bak')){
  if(isset($_tmp[0]) && is_file($_tmp[0])) unlink($_tmp[0]);
  showMessage('バックアップから読み込みました');
 } else showMessage('バックアップファイルはまだ作成されていないようです');
}

if(is_array($name=p_('rename')) && is_array($path=p_('repath'))){ # テーマ名・パス変更
 $new_themelist = array();
 $input = '<?php $THEME_LIST = array(';
 for ($i=0; $i < count($name); $i++){
  $input .= '\''.$name[$i].'\'=>\''.$path[$i].'\',';
  $new_themelist[$name[$i]] = $path[$i];
 }
 $input .= ');?>';
 rewrite($theme_ini, $input);
 $THEME_LIST = $new_themelist;
 showMessage("テーマの設定を変更しました");
}

if(p_('new_theme')!=''){                 # テーマ追加
 if(($tp=p_('new_path'))==''){
  showMessage('テーマまでのパスが設定されていません');
 } else {
  $theme_path = dirname($tp);
  $theme_dir = str_replace('theme', '', $theme_path);
 
  $new_themelist = array();
  $name = p_('new_theme');
  $THEME_LIST[$name] = $tp;
  $input = '<?php $THEME_LIST = array(';
  foreach ($THEME_LIST as $_name=>$path){
   $new_themelist[$_name] = $path;
   $input .= '\''.$_name.'\'=>\''.$path.'\',';
  }
  $input .= ');?>';
  rewrite($theme_ini, $input);
  $THEME_LIST = $new_themelist;
  refresh_page('admin.php?mode=theme&sub=detail');
  showMessage('新しくテーマを追加しました');
 }
}

if(g_('sub')=='detail' && g_('del')!=''){
 $new_themelist = array();
 $input = '<?php $THEME_LIST = array(';
 $del = rawurldecode(str_replace(array('-','_'), array('.','%'), g_('del')));

 foreach ($THEME_LIST as $name=>$path){
  if($del==$path){
   $deleted = $name;
   continue;
  }
  $new_themelist[$name] = $path;
  $input .= '\''.$name.'\'=>\''.$path.'\',';
 }
 $input .= ');?>';
 rewrite($theme_ini, $input);
 $THEME_LIST = $new_themelist;

 if(g_('cmd')=='list'){ # テーマリストから削除
  echo g_('del').',テーマ：'.$deleted.' をリストから削除しました';
 }
 if(g_('cmd')=='all'){  # テーマディレクトリごと削除
  $del_dir = PATH.dirname($del);
  $cmd = "rm -rf $del_dir";
  if(is_dir($del_dir)) `$cmd`; # system
  echo g_('del').',テーマ：'.$deleted.' をディレクトリごと削除しました';
 }
 exit;
}

if(p_('theme_rotate')!=''){ # テーマ順序変更
 $new_themelist = array();
 $themes = explode("\t", p_('theme_rotate', 0));
 $input = '<?php $THEME_LIST = array(';
 foreach ($themes as $t){
  foreach ($THEME_LIST as $name=>$path){
   if($path==$t){
    $new_themelist[$name] = $path;
    $input .= '\''.$name.'\'=>\''.$path.'\',';
   }
  }
 }
 $input .= ');?>';
 rewrite($theme_ini, $input);
 $THEME_LIST = $new_themelist;
 showMessage('テーマ順序を変更しました');
}

$DIVISION['header'] .= '
<style type="text/css">
  #theme-table { text-align: center; font:500 90% verdana; margin: 1.5em auto; border: 1px solid #aaa; padding: 2px; }
  #theme-table tr th, #theme-table tr td { padding: 2px; }
  img { cursor: pointer; }
</style>
';

if(v_('sub')=='rotate'){ # テーマの順序設定
 $body .= '
 <form action="admin.php" method="post" style="margin-top: 1.5em;">
 <fieldset><legend>テーマの順序設定</legend>
 <ul class="p2em">
  <li>スタイル切り替えのセレクトボックス表示が有効であればテーマを選ぶセレクトボックスがこの順で表示されます。</li>
  <li>一番上のテーマが，デフォルトのテーマ（テーマ切り替え無効時も含む）となります。</li>
  <li>順序の変更は，まず移動させたいテーマ名を選択して，その状態で上下させて下さい。</li>
  <li>設定の保存は下の更新ボタンを押して下さい。その順序が反映されます。</li>
 </ul>

 <div class="hidden">
  <input type="hidden" name="mode" value="theme" />
  <input type="hidden" name="sub" value="rotate" />
  <input type="text" name="theme_rotate" id="theme_rotate" value="" />
 </div>
 <div style="margin: auto auto 2em auto; width:210px;">
 <script type="text/javascript">/*<![CDATA[*/
function UpDownList(dir){
 if(document.createElement){
  var ob = d.getElementById("themelist");
  var index = ob.selectedIndex;
  if(index < 0){ alert("まずテーマを選択して下さい。"); return;}
  if(index==0 && dir < 0) return;
  if(index==ob.options.length-1 && dir > 0) return;
  
  var opt = d.createElement("option");
  opt.value = ob.options[index+dir].value;
  opt.text = ob.options[index+dir].text;
  opt.id = ob.options[index+dir].id;
  ob.removeChild(ob.options[index+dir]);
  if(client.MSIE){
   ob.add(opt, index);
  } else ob.insertBefore(opt, ob.options[index]);
 }
}
function _submit(){
 var themelist = o("#themelist");
 for (var i=0; i < themelist.$.options.length; i++){
  o("#theme_rotate").$.value += (themelist.$.options[i].value+"\t");
 }
}
 /*]]>*/</script>

 <table>
 <tr>
 <td>
 <select size="'.count($THEME_LIST).'" name="themelist" id="themelist" style="width:90%;">
 ';
 foreach($THEME_LIST as $name=>$path){
  $id = preg_replace('|theme/(.+?)/.+$|', '$1', $path);
  $body .= (' <option value="'.$path.'" id="'.$id.'"> '.$name .' 　</option>' . NL);
 }
 $body .= '</select>
 </td>
 <td style="vertical-align:middle;width:10%;">
 <img src="Images/upward1.png" onclick="UpDownList(-1);" alt="Up" style="cursor:pointer;"
  onmouseover="this.src=\'Images/upward2.png\'" title="上に移動"
   onmouseout="this.src=\'Images/upward1.png\'" /><br />
 <img src="Images/downward1.png" onclick="UpDownList(1);" alt="Down" style="cursor:pointer;"
  onmouseover="this.src=\'Images/downward2.png\'" title="下に移動"
   onmouseout="this.src=\'Images/downward1.png\'" />
 </td>
 </tr>
 <tr class="center">
  <td>
   <input type="image" src="Images/reload1.png" onclick="_submit();return true;"
    onmouseover="this.src=\'Images/reload2.png\';"
    onmouseout="this.src=\'Images/reload1.png\'" alt="Refresh" title="更 新" />
  </td>
 </tr>
 </table>
 </div>
 </fieldset>
 </form>
 ';
 return $DIVISION['body'] .= $header.$body;
}

if(v_('sub')=='detail'){
 $body = '
<script type="text/javascript">/*<![CDATA[*/
 my_confirm_ajax = function(tar, val, cmd){
  tar = "テーマ："+decodeURIComponent(tar)+" を削除しますか？";
  if(!confirm(tar)){
   return false;
  } else {
   oParts.server.get(\'admin.php?mode=theme&sub=detail&del=\'+val+\'&cmd=\'+cmd, function(ret){
    o("#" + ret.split(/,/)[0]).away();
    showMessage(ret.split(/,/)[1]);
   }
   );
  return false;
 }
}
 
 /*]]>*/</script>
 <form action="admin.php" method="post" style="margin-top: 1.5em;">
 <fieldset><legend>テーマの詳細設定</legend>
  <ul class="p2em" style="width: 80%;">
   <li>「テーマの名前」とは，スタイル切り替えのセレクトボックスに表示されるテーマ名のことです。日本語も使えます。</li>
   <li>「CSSファイルまでのパス」は，正確にCSSファイルまでのパスを指定して下さい。</li>
   <li> 削除の際に，「全削除」で削除すると，削除対象テーマのディレクトリを削除しますので画像なども消えます。
   「リスト削除」で削除すると，テーマのリストからなくなるだけでディレクトリ自体は残ります。</li>
  </ul>
  <div class="hidden">
   <input type="hidden" name="mode" value="theme" />
   <input type="hidden" name="sub" value="detail" />
   <input type="hidden" name="hint" id="hint" value="あいうえお眉幅" />
  </div>
  <table id="theme-table" style="width: auto; background: #f4f6f8;">
   <colgroup>
    <col style="width:50px;" />
    <col style="width:40px;" />
    <col style="min-width:100px;" />
    <col style="width:100px;" />
    <col style="width:45px;" />
   </colgroup>
   <tr class="header"><th>テーマの名前</th><th>編 集</th><th>CSSファイルまでのパス</th><th>リストから削除</th><th>全削除</th></tr>
 ';
 foreach($THEME_LIST as $name=>$path){
  $tar = str_replace(array('.','%'), array('-','_'), rawurlencode($path));
  $body .= ('<tr id="'.$tar.'">
  <td><input type="text" name="rename[]" value="'.$name.'" size="10" /></td>
  <td><img onclick="window.location=\'admin.php?mode=theme&aim='.$path.'&sub=html\'" src="Images/edit.png" alt="Edit" title=" 編 集 " class="icon16x16" /></td>
  <td class="left"><input type="text" name="repath[]" value="'.$path.'" size="12" /></td>
  <td><img onclick="return my_confirm_ajax(\''.rawurlencode($name).'\',\''.$tar.'\',\'list\');" src="Images/del.png" class="icon16x16" alt="Delete" title=" 削 除 " /></td>
  <td><img onclick="return my_confirm_ajax(\''.rawurlencode($name).'\',\''.$tar.'\',\'all\');" src="Images/trash.png" class="icon16x16" alt="Delete" title=" 削 除 " /></td>
  </tr>'.NL);
 }
 $body .= '
 </table>
 <p class="center" style="margin: .3em auto 1em auto;">
   <input type="image" src="Images/reload1.png"
    onmouseover="this.src=\'Images/reload2.png\';"
    onmouseout="this.src=\'Images/reload1.png\'" alt="Refresh" title="更 新" />
  </p>
 </fieldset>
 </form>
 ';
 return $DIVISION['body'] .= $header.$body;
}

if(v_('sub')=='add_theme'){ # テーマの追加
 if(PHP_VERSION >= '4.3.0') $THEMES = glob('theme/'.'*', GLOB_ONLYDIR);
 else return $DIVISION['body'] .= 'php version too old!';
 $NEW_THEMES = $_NEW_THEMES = array();
 if(!empty($THEMES)){
  foreach($THEMES as $_theme){
   $hit = FALSE;
   foreach ($THEME_LIST as $entry){
    if(strstr($entry, $_theme)){
     $hit = TRUE; break;
    }
   }
   if(!$hit) $NEW_THEMES[] = $_theme;
  }
 }
 if(!empty($NEW_THEMES)){
  foreach ($NEW_THEMES as $new){
   $isTemplate = $isCSS = $isImages = '';
   $d = opendir ($new);
   while ($file = readdir ($d)){
    if(strstr($file, 'template.php')) $isTemplate = $file;
    if(strstr($file, '.css')) $isCSS .= $new.'/'.$file.',';
    if(strstr($file, 'Images')) $isImages = $file;
   }
   closedir ($d);
   if($isTemplate!='' && $isCSS!='' && $isImages!=''){
    $_NEW_THEMES[] = $new.'|'.$isCSS;
   }
  } #foreach
 }
 $body .= '
 <form method="post" action="admin.php" enctype="multipart/form-data" style="width:97%;margin-top: 1.5em;">
 <fieldset><legend>新しいテーマの追加</legend>
  <ul class="p2em" style="font-family:arial;padding-left:1em;">
 ';
 if(!empty($_NEW_THEMES)){
  $size = sizeof($_NEW_THEMES);
  list($name, $path) = explode('|', $_NEW_THEMES[0]);
  list($path,) = explode(',', $path);
  $body .= '
   <li>  新しいテーマ「 <strong>'.$name.'</strong>」が見つかりました。</li>
   '.($size > 1 ? '<li>別にも新たにテーマがあるようですが、ひとつずつ追加していきますので、適宜以下を指定して追加ボタンを押して下さい。</li>' : '').'
   <li>「テーマの名前」では，「スタイル切り替えバー」で表示されるテーマ名を指定します。日本語も可です。</li>
   <li>「CSSファイルまでのパス」は，CSSファイルまでのパスです。以下でよければそのままで結構です。</li>
  </ul>
  <div class="hidden">
   <input type="hidden" name="mode" value="theme" />
   <input type="hidden" name="sub" value="add_theme" />
   <input type="hidden" name="hint" id="hint" value="あいうえお眉幅" />
  </div>
  <table style="width:420px; margin: auto;font-family:arial;">
   <tr>
    <td class="right">テーマの名前 : </td>
    <td class="left"><input type="text" name="new_theme" id="new_theme" value="'.basename($name).'" style="width:200px;font-family:arial;" /></td>
   </tr>
   <tr>
    <td class="right">CSSまでのパス : </td>
    <td class="left"><input type="text" name="new_path" id="new_path" value="'.$path.'" style="width:200px;font-family:arial;" /></td>
   </tr>
   <tr class="center">
   <td colspan="2">
    <input type="image" src="Images/add1.png"
     onmouseover="this.src=\'Images/add2.png\';"
     onmouseout="this.src=\'Images/add1.png\'" alt="Add" title="追 加" />
   </td>
   </tr>
  </table>
  </fieldset>
 </form>
 ';
 } else {
  $body .= '
   <li> ppBlog では，テーマセットは<strong>theme</strong>ディレクトリ以下に置かれます。</li>
   <li> テーマセットは<strong>template.php</strong>と<strong>CSSファイル(*.css)</strong>と<strong>Images</strong>ディレクトリの３つ
   が必須となります。</li>
   <li>テーマによっては、CSSファイルが複数個ある場合もあるでしょう。</li>
   <li>テーマの追加は、まずFTPソフト経由で、テーマフォルダをアップロードすることから始まります。<br />アップロードし終えたら、
    <ul>
     <li>テーマディレクトリのパーミッションを<strong>707</strong>に、</li>
     <li>その中の<strong>Images</strong>ディレクトリのパーミッションを<strong>707</strong>に</li>
     <li>同様に<strong>template.php</strong>と<strong>*.css</strong>のパーミッションを<strong>606</strong>に</li>
    </ul>
    設定することを忘れないで下さい。
   </li>
   <li>パーミッションの設定が済んだら、再度このページ（テーマの追加）にアクセスして下さい。アップロードしたテーマが自動的に認識されていると思います。</li>
  </ul>
  ';
 }
 return $DIVISION['body'] .= $header.$body;
}

if(!is_writable($temp_file)){ // is re-writable ?
 return $DIVISION['header'] .= '
 <p style="width:300px;border:2px solid #aaa; background:#eee;margin:auto;padding:.8em;">
 ファイルの書き換えができない設定のようです。 FTPソフトでthemeディレクトリおよびその下の各テーマのディレクトリの
 パーミッションを707 or 777，更に各ディレクトリ以下のtemplate.htmlやcssファイルは606 or 666に変えて下さい。<br />
 　多くのFTPソフトでは，パーミッションの変更に際してディレクトリやファイルは複数選択して一括変更出来ます。
 </p>
 ';
}

if(($aim=v_('aim')) != ''){
 foreach ($THEME_LIST as $name=>$path){
  if($path==$aim){
   $tname = $name;
   break;
  }
 }
} else $aim = array_shift($THEME_LIST);
if(v_('scroll')){
 list($scroll1, $scroll2) = explode(':', v_('scroll'));
} else $scroll1 = $scroll2 = 0;

$body .= '
<script type="text/javascript">/*<![CDATA[*/
 function $(id){return d.getElementById(id);}
 function preView(){ $("scroll").value = (d.documentElement.scrollTop+":"+$("editarea").scrollTop); $("jspv").action="index.php";return true;}
 function _save(){ $("scroll").value = (d.documentElement.scrollTop+":"+$("editarea").scrollTop); return true;}
 function help(){ $("info").style.display = "block";}
 function setSize(s){ $("editarea").style.fontSize = s + "pt";}
 oParts.start(function(){ d.documentElement.scrollTop = '.$scroll1.'; $("editarea").scrollTop = '.$scroll2.';});
/*]]>*/</script>
<form id="jspv" action="admin.php" method="post">
<fieldset><legend>テーマの編集</legend>
<h4>テーマ： '.dirname($theme).' ['.(strstr(v_('sub'),'css')?$aim:dirname($aim).'/template.php').'] の編集をします。</h4>
<h4 class="center">編集テーマの変更  <select name="ttheme" onchange="window.location=this.value;">
';

foreach ($THEME_LIST as $name=>$_theme){
 $selected = (v_('aim')==$_theme) ? ' selected="selected"' : '';
 $body .= ' <option value="admin.php?mode=theme&aim='.$_theme.'&sub='.str_replace(':back', '', v_('sub')).'"'.$selected.'> '.$name.'　 </option>'.NL;
}

$body .= '</select></h4>
 <div class="center" style="margin: 1em auto 2em auto;">';
if(strstr(v_('sub'),'html') || v_('sub')==''){
 $h_checked=' checked="checked" '; $c_checked=' '; $k_checked=' ';
} elseif(strstr(v_('sub'), 'css')){
 $h_checked=' '; $c_checked=' checked="checked" '; $k_checked = ' ';
}

$body .= '
 <ul class="p2em" style="width: 480px; text-align: left; display:'.($helperState?'block':'none').';">
  <li> <a href="http://p2b.jp/1220030180" onclick="window.open(this.href,\'\');return false;">テーマチェッカー</a>を使うと、テーマ編集の手助けになります。</li>
  <li>「$」や「%」で囲まれた文字以外は変更可能です。</li>
  <li>スタイルシートのプレビューでは，画面に表示されている「戻る」リンクで編集画面に戻って下さい。</li>
  <li>template.php の編集では、最初の方で記事ボックスの指定やカレンダーの種類などを指定します。
 </ul><p class="helper" onclick="toggleHelper(this);" title="説明を閉じる">　</p>
 <input type="radio" name="jumpto" id="rhtml"'.$h_checked.'onclick="location=\'admin.php?mode=theme&aim='.$aim.'&sub=html\'" />
 <label for="rhtml">テンプレートHTMLの編集</label>
 <input type="radio" name="jumpto" id="rcss"'.$c_checked.'onclick="location=\'admin.php?mode=theme&aim='.$aim.'&sub=css\'" />
 <label for="rcss">スタイルシートの編集</label>
 </div>
 <div class="hidden">
  <input type="hidden" name="mode" value="theme" />
  <input type="hidden" name="aim" value="'.$theme.'" />
  <input type="hidden" name="scroll" id="scroll" value="'.$scroll1.':'.$scroll2.'" />
  <input type="hidden" name="qs" value="'.str_replace(':back','',str_replace('mode=theme&', '', QUERY)).'" />
  <input type="hidden" name="sub" value="'.(v_('sub')==''?'html':str_replace(':back','',v_('sub'))).'" />
 </div>
 <div class="center">
  <input type="submit" onclick="preView();" name="preview" title="見栄えのチェック" value="プレビュー" />&nbsp;
  <input type="submit" onclick="_save();" name="save" title="この設定で保存" value="保 存" />&nbsp;&nbsp;&nbsp;
  <input type="submit" name="backup" title="今の状態をバックアップします" value="バックアップ" />&nbsp;
  '.(is_file($temp_file.'.bak') ? '<input type="submit" name="init" title="最後にバックアップしたときの状態に戻します" value="復 元" />&nbsp;' : '').'
  <div style="display:inline; margin-left:1.5em;">
  <a href="#controlPanel" onclick="setSize(8);return false;" class="change-fs"><span style="font-size:8pt;">A</span></a>
  <a href="#controlPanel" onclick="setSize(10.5);return false;" class="change-fs"><span style="font-size:10.5pt;">A</span></a>
  <a href="#controlPanel" onclick="setSize(12);return false;" class="change-fs"><span style="font-size:12pt;">A</span></a>
  </div>
  '.(is_file($temp_file.'.bak') ? '<p style="font:500 13px arial; color:crimson;">[最終バックアップ：'.date('Y/m/d H:i:s', filemtime($temp_file.'.bak')).']</p>' : '').'
 </div>
 <div style="width:100%;margin:auto;">
 <textarea rows="30" cols="40" name="editarea" id="editarea"
  style="'.(strstr(v_('sub'),'css') ?
  'font:500 10pt verdana;color:#003333;background: #f4f4ff url(Images/CSS.png) 93% top no-repeat'.(IE?' fixed':'').';' :
  'font:500 10pt verdana;background: #f4f4ff url(Images/HTML.png) 94% top no-repeat'.(IE?' fixed':'').';').'">'
 .htmlspecialchars($textarea).'</textarea>
 </div>
 <div class="center">
  <input type="submit" onclick="preView();" name="preview" title="見栄えのチェック" value="プレビュー" />&nbsp;
  <input type="submit" onclick="_save();" name="save" title="この設定で保存" value="保 存" />&nbsp;&nbsp;&nbsp;
  <input type="submit" name="backup" title="今の状態をバックアップします" value="バックアップ" />&nbsp;
  <input type="submit" name="init" title="最後にバックアップしたときの状態に戻します" value="復 元" />
 </div>
 </fieldset>
 </form>
';
return $DIVISION['body'] .= $header.$body;

?>
